package com.newstore.database;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.newstore.classes.Barcode;

/**
 * Permet de faire le lien entre les objets Barcode et la base de données
 * @author Guillaume
 * @version 1.0
*/
public class BarcodeDatabase
{
	private SQLiteDatabase databaseQueries;
	
	/**
	 * Constructeur
	 * @param databaseQueries Base de données où les requêtes vont s'effectuer
	 */
	public BarcodeDatabase(SQLiteDatabase databaseQueries)
	{
		this.databaseQueries = databaseQueries;
	}
	
	/**
	 * Effectue une requête pour retourner un Barcode à partir d'un id
	 * @param barcodeId
	 * @return Le barcode souhaité
	 */
	public Barcode getBarcodeFromId(int barcodeId)
	{
		Cursor cursor = databaseQueries.query(DatabaseNewstore.TABLE_BARCODE, new String[] {"id", DatabaseNewstore.COL_PREFIX_ELEMENT, 
				DatabaseNewstore.COL_SECOND_ELEMENT, DatabaseNewstore.COL_THIRD_ELEMENT, 
				DatabaseNewstore.COL_FOURTH_ELEMENT}, "id = " + barcodeId, null, null, null, null);
		return barcodeCursor(cursor);
	}
	
	/**
	 * Permet de chercher un barcode et de récupérer son id à partir d'un barcode sans id
	 * @param barcode Barcode sans id
	 * @return Un barcode avec un id
	 */
	public Barcode getBarcodeFromBarcode(Barcode barcode)
	{
		Cursor cursor = databaseQueries.query(DatabaseNewstore.TABLE_BARCODE, new String[] {"id", DatabaseNewstore.COL_PREFIX_ELEMENT, 
				DatabaseNewstore.COL_SECOND_ELEMENT, DatabaseNewstore.COL_THIRD_ELEMENT, DatabaseNewstore.COL_FOURTH_ELEMENT}, 
				DatabaseNewstore.COL_FOURTH_ELEMENT + " = " + barcode.getFourthElement(), null, null, null, null);
		return barcodeCursor(cursor);
	}
	/** 
	 * Insère un barcode dans la base de données
	 * @param barcode barcode que l'on souhaite insérer dans la base de données
	 * @return L'id du barcode inséré
	 */
	public long insertBarcode(Barcode barcode)
	{
		ContentValues values = new ContentValues();
		values.put(DatabaseNewstore.COL_PREFIX_ELEMENT, barcode.getPrefixElement());
		values.put(DatabaseNewstore.COL_SECOND_ELEMENT, barcode.getSecondElement());
		values.put(DatabaseNewstore.COL_THIRD_ELEMENT, barcode.getThirdElement());
		values.put(DatabaseNewstore.COL_FOURTH_ELEMENT, barcode.getFourthElement());
		
		return this.databaseQueries.insert(DatabaseNewstore.TABLE_BARCODE, null, values);
	}
	
	/**
	 * Cursor qui permet d'avoir un barcode grâce à une requête
	 * @param cursor Cursor qui permet de parcourir la requête
	 * @return Le barcode rempli
	 */
	private Barcode barcodeCursor(Cursor cursor)
	{
		if (cursor.getCount() == 0)
			return null;
		
		cursor.moveToFirst();
		Barcode barcode = new Barcode(cursor.getInt(0), cursor.getInt(1), cursor.getInt(2), cursor.getInt(3), cursor.getInt(4));
		cursor.close();
		
		return barcode;
	}
}
